文件操作(2)
十、二进制文件的读取和写入
二进制文件的处理流程和文本文件流程一致。首先创建文件对象,不过需要指定二进制模式。创建好二进制文件对象后,仍然可以使用write()、read()实现文件的读写操作。
f = open(r"d:\a.txt", 'wb') #可写的、重写模式的二进制文件对象
f = open(r"d:\a.txt", 'ab') #可写的、追加模式的二进制文件对象
f = open(r"d:\a.txt", 'rb') #可读的二进制文件对象
▶ 示例:读取图片文件,实现文件的拷贝
with open('logo1.png', 'rb') as srcFile, open("ddd.png", "wb") as destFile:
for line in srcFile:
destFile.write(line)
十一、文件对象的常用属性和方法
文件对象的属性
属性 | 说明 |
name | 返回文件的名字 |
mode | 返回文件的打开模式 |
closed | 若文件被关闭,则返回True |
文件对象的打开模式
模式 | 说明 |
r | 读模式 |
w | 写模式 |
a | 追加模式 |
b | 二进制模式(可与其他模式组合) |
+ | 读写模式(可与其他模式组合) |
文件对象的常用方法
方法名 | 说明 |
read([size]) | 从文件中读取size个字节或字符的内容返回。若省略size,则读取到文件末尾 |
readline() | 从文本文件中读取一行内容 |
readlines() | 把文本文件中每一行都作为独立的字符串对象,放入列表返回 |
write(str) | 将字符串str内容写入文件 |
writelines(s) | 将字符串列表s写入文件,不添加换行符 |
seek(offset[,whence]) | 把文件指针移动到新的位置。whence:0从文件头(默认),1从当前位置,2从文件尾 |
tell() | 返回文件指针的当前位置 |
truncate([size]) | 只留下指针前size个字节的内容,其余全部删除 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源 |
文件任意位置操作
▶ 示例:移动文件指针seek()
#e.txt的内容是:abcefghljklmn
with open("e.txt", "r", encoding="utf-8") as f:
print("文件名是:{0}".format(f.name)) #文件名是:e.txt
print(f.tell()) #0
print("读取的内容:{0}".format(str(f.readline()))) #abcdefghijklmn
print(f.tell()) #14
f.seek(3, 0)
print("读取的内容:{0}".format(str(f.readline()))) #defghijklmn
十二、使用pickle序列化
序列化指的是:将对象转化成"串行化"数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的"串行化数据"转化成对象。
Python中,一切皆对象,对象本质上就是一个"存储数据的内存块"。有时候,需要将"内存块的数据"保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要"对象的序列化和反序列化"。对象的序列化机制广泛的应用在分布式、并行系统上。
• pickle.dump(obj, file):obj是要被序列化的对象,file指的是存储的文件
• pickle.load(file):从file读取数据,反序列化成对象
▶ 示例:将对象序列化到文件中
import pickle
with open("data.dat", "wb") as f:
name = "高淇"
age = 34
score = [90, 80, 70]
resume = {'name': name, 'age': age, 'score': score}
pickle.dump(resume, f)
▶ 示例:将获得的数据反序列化成对象
import pickle
with open("data.dat", "rb") as f:
resume = pickle.load(f)
print(resume)
十三、CSV文件的操作
CSV是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。
• 值没有类型,所有值都是字符串
• 不能指定字体颜色等样式
• 不能指定单元格的宽高,不能合并单元格
• 没有多个工作表
• 不能嵌入图像图表
Python标准库的模块csv提供了读取和写入csv格式文件的对象。
csv.reader对象和csv文件读取
▶ 示例:csv.reader对象从csv文件读取数据
import csv
with open(r"d:\a.csv") as a:
a_csv = csv.reader(a) #创建csv对象
headers = next(a_csv) #获得列表对象,包含标题行的信息
print(headers)
for row in a_csv: #循环打印各行内容
print(row)
csv.writer对象和csv文件写入
▶ 示例:csv.writer对象写一个csv文件
import csv
headers = ["工号", "姓名", "年龄", "地址", "月薪"]
rows = [("1001", "高淇", 18, "西三旗1号院", "50000"),
("1002", "高八", 19, "西三旗1号院", "30000")]
with open(r"d:\b.csv", "w") as b:
b_csv = csv.writer(b) #创建csv对象
b_csv.writerow(headers) #写入一行(标题)
b_csv.writerows(rows) #写入多行(数据)
上一篇:文件操作(3)
下一篇:python基础概念


